package com.dxf.chepter04

import scala.beans.BeanProperty

/**
 * 构造器参数
 * 1 scala类的主构造器形参未用任何修饰符修饰,那么这个参数就是局部变量
 * 2 val修饰的形参 ->私有只读属性
 * 3 var 修饰   -> 私有可读写属性
 *
 *
 *
 * Bean属性
 * javaBeans规范定义了java的属性是像 getXxx() setXxx() ,许多java工具都依赖这个命名习惯,为了互操作性
 * 将scala字段加@BeanProperty ,这样自动生成规范setXxx/getXxx方法
 * 可以用setXxx()和getXxx()来调用属性
 *
 * 注意:
 * 给某个属性加入@BeanProperty注解后 会生成getXxx(),setXxx()方法
 * 和底层的xxx()和xxx_$eq()方法没有冲突,可以共存
 *
 *
 *
 *
 */
object T46_属性高级部分 {
  def main(args: Array[String]): Unit = {
    val worker = new Worker("tom")
    worker.name
    val worker2 = new Worker2("tom")
    worker2.inName

    val car = new Car
    car.setName("1")
    println(car.getName())
  }
}


class Worker(inName: String) {
  // 1 scala类的主构造器形参未用任何修饰符修饰,那么这个参数就是局部变量
  // inName就是一个局部变量,范围在主构造器
  var name = inName

}


class Worker2(val inName: String) {
  //2 inName是Worker2的只读的私有属性

  var name = inName

}

class Worker3(var inName: String) {
  //2 inName是Worker2的只读的私有属性

  var name = inName

}

class Car {
  @BeanProperty
  var name: String = null


}